package com.mall.common.util.bit;

/**
 * 标位工具
 * @author is_zhoufeng@163.com
 * 2015年1月1日 上午3:41:45
 */
public class BitFlagUtil {
	
	public static final int FULL_FLAG = 0XFFFFFFFF ;
	
	/**
	 * 打标
	 * @param falg 需要打标的源数
	 * @param offset 标位
	 */
	public static Long sign(Long flag , int offset){
		int offsetT = 1 << ( offset - 1);
		return flag | offsetT ;
	}
	
	/**
	 * 去标
	 * @param falg 需要移除标的源数
	 * @param offset 标位
	 */
	public static Long removeSign(Long flag , int offset){
		int offsetT = 1 << ( offset - 1);
		offsetT = FULL_FLAG ^ offsetT ;
		return flag & offsetT ;
	}
	
	/**
	 * 检查标位是否被打标
	 * @param flag	
	 * @param offset  标位
	 * @return 该标位是否被打标
	 */
	public static boolean checkSign(Long flag , int offset){
		int offsetT = 1 << ( offset - 1);
		return (flag & offsetT) == offsetT ;
	}
	
	public static void main(String[] args) {
		Long i = 0l;
		 i = sign(i, 1);
		 i = sign(i, 2);
		 i = sign(i, 4);
		System.out.println(checkSign(i, 1));
		System.out.println(checkSign(i, 4));
		System.out.println(checkSign(i, 3));
	}

}
